﻿//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
// 프로그램 명		: frmCreateCads.cs
// 프로그램 기능		: Cad를 생성하는 창
// 클래스 기능		: 
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 개발자			: 김승현, 조범준
// 개발일			: 2014-08-13
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// F/W 버전		    : Dot NET Compack Framework 4.0 Service Pack 1 Patch
// 라이센스			: Copyright ⓒ 2014-2014 All rights reserved.
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 명명규칙			: 클래스(class) 명				- "c" + 클래스명
//					  전역(private) 상수			- "MC_" + 상수명
//					  공용(public)  상수			- "PC_" + 상수명
//					  전역(private) 변수/객체/핸들/구조체/컬렉션/델리게이트
//													- "mv_" + 타입/obj_/hwnd_/stru_/coll_/del_ + 명
//					  공용(public)  변수/객체/핸들/구조체/컬렉션/델리게이트/이벤트
//													- "pv_" + 타입/obj_/hwnd_/stru_/coll_/del_/evnt_ + 명
//					  공용(public)  속성(Property)	- "pp_" + 타입 + 속성명
//					  전역(private) 함수/API		- "mf_" + 함수명/API 함수명
//					  공용(public)  함수/API		- "pf_" + 함수명/API 함수명
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 개발자는 개발/수정시 위의 내용을 반드시 작성하며 내용이 일치하지 않을때에는 모든 사항을 개발자가 책임 진다.
//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
namespace TimsXBX
{
	///▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
	/// <summary>frmCreateCads 클래스</summary>
	///▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
	public partial class frmCreateCads : Form
	{
		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [생성자/소멸자]
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>생성자</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		//---------------------------------------------------------------------------------------------------
		//PROJECTS UI에서 호출시
		//---------------------------------------------------------------------------------------------------
		public frmCreateCads(frmProjects fProjects, string sCadType, string sParentCID, string sParentOID)
		{
			InitializeComponent();

			this.mv_frmProjects = fProjects;
			this.mv_sCadType = sCadType;
			this.mv_sSpName = "SP_PROJECTS_RELATEDCADS_CUD";
			this.mv_sParentCID = sParentCID;
			this.mv_sParentOID = sParentOID;
		}
		//---------------------------------------------------------------------------------------------------
		//PARTS UI에서 호출시
		//---------------------------------------------------------------------------------------------------
		public frmCreateCads(frmParts fParts, string sCadType, string sParentCID, string sParentOID)
		{
			InitializeComponent();

			this.mv_frmParts = fParts;
			this.mv_sCadType = sCadType;
			this.mv_sSpName = "SP_PARTS_RELATEDCADS_CUD";
			this.mv_sParentCID = sParentCID;
			this.mv_sParentOID = sParentOID;
		}
		public frmCreateCads(frmMain fMain)
		{
			InitializeComponent();

		}
		public frmCreateCads()
		{
			InitializeComponent();
			mf_Init(this);
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>소멸자</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		~frmCreateCads()
		{
			mf_UnInit(this);
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 상수 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 상수명 첫 문자는 "MC_" 로 시작
		//         - 전체를 영문 대문자로 하고 상수명이 긴 경우 '_'로 구분해서 명명
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		///<summary>전역(private) 상수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private const string MC_HELLO = "Hello...";
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 상수 - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 상수명 첫 문자는 "PC_" 로 시작
		//         - 전체를 영문 대문자로 하고 상수명이 긴 경우 '_'로 구분해서 명명
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		///<summary>공용(public) 상수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public const string PC_HELLO = "Hello...";
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 변수/객체/핸들/구조체/컬렉션/델리게이트 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "mv_타입"/"mv_obj"/"mv_hwnd"/"mv_struc"/"mv_coll"/"mv_del" 로 시작
		//         - 영문 대소문자로 시작하고 변수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>전역(private) 변수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mv_sHello = null;
		//---------------------------------------------------------------------------------------------------
		//메인 폼 객체 핸들
		//---------------------------------------------------------------------------------------------------
		private frmProjects mv_frmProjects = null;							//Projects 폼 인스턴스 핸들
		private frmParts mv_frmParts = null;								//Parts 폼 인스턴스 핸들
		private ComCls.cFunction mv_oFunc = null;							//공용함수 인스턴스 핸들
		//---------------------------------------------------------------------------------------------------
		private string mv_sCadType = null;									//등록할 Cad Type(창 호출시 구분: 2D Drawings / 3D Models)
		private string mv_sSpName = null;									//Create Cad 창에서 사용할 프로시져(Projects/ Parts 구분)
		private string mv_sParentCID = null;								//등록시 Projects 또는 Parts 연결 CID
		private string mv_sParentOID = null;								//등록시 Projects 또는 Parts 연결 OID
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 변수/객체/핸들/구조체/컬렉션/델리게이트/이벤트 - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pv_타입"/"pv_obj"/"pv_hwnd"/"pv_struc"/"pv_coll"/"pv_del"/"pv_event" 로 시작
		//         - 영문 대소문자로 시작하고 변수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 변수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pv_sHello = null;
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 속성(Property:읽기 쓰기 선택적 가능) - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pp_타입" 로 시작
		//         - 영문 대소문자로 시작하고 속성명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 속성(Property) 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pp_bHello
		{
			get { return mv_sHello; }
			set { mv_sHello = value; }
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 함수/API - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "mf_" + 함수명 또는 API 함수명 으로 시작
		//         - 영문 대소문자로 시작하고 함수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>전역(private) 함수 선언 예</summary>
		/// <param name="sStr">전역(private) 함수 인자 선언 예</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mf_Hello(string sStr)
		{
			try
			{
				sStr = "Hello...";
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return sStr;
		}

		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>클래스 초기화</summary>
		/// <param name="objClass">클래스 객체 인스턴스</param>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_Init(frmCreateCads objClass)
		{
			try
			{
				//클래스 초기화
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>클래스 마무리</summary>
		/// <param name="objClass">클래스 객체 인스턴스</param>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mf_UnInit(frmCreateCads objClass)
		{
			try
			{
				//클래스 마무리
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>Create CAD Web Url 만들기</summary>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mf_MakeWeb_CreateCadtUrl()
		{
			string sWebUrl = null;
			string sWebArg = null;

			try
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 경로 만들기
				//---------------------------------------------------------------------------------------------------
				//sWebUrl = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
				sWebArg = string.Format("{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}",
											ComCls.cConst.PC_WEBSQL_CMD_SP, this.txtSpName.Text,
											"iJOBMODE", "CREATE_NEW_CADS",
											"iREL_OID", 0,
											"iPAR_CID", Convert.ToInt32(this.txtParentCid.Text),
											"iPAR_OID", Convert.ToInt32(this.txtParentOid.Text),
											"iSON_CID", 0,
											"iSON_OID", 0,
											"iCADTYPE", this.cmbCadType.SelectedItem.ToString(),
											"iCADNUMBER", this.txtCadNumber.Text,
											"iCADNAME", this.txtCadName.Text,
											"iDESC", this.txtCadDescription.Text,
											"iREVISION", this.txtCadRevision.Text,
											"iREMARK", this.txtCadRemark.Text);
				sWebUrl = sWebArg;
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return sWebUrl;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>웹 파즈 Url 만들기(TCUD)</summary>
		/// <param name="eCommand">트랜잭션 처리시 명령</param>
		/// <param name="sSID">트랜잭션 처리시 세션 ID</param>
		/// <param name="nRow">트랜잭션 처리시 데이터그리드뷰 행번호</param>
		/// <param name="sUrl">트랜잭션 처리시WebParse 경로 전달</param>
		/// <returns>bool</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private bool mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND eCommand, string sSID, DataGridView oDataGridView, int nRow, ref string sUrl, string sWebSql)
		{
			bool bResult = true;
			string sStyle = null;
			string sCommand = null;

			try
			{
				sStyle = ComCls.cConst.PC_WEBSQL_CMD_SP;
				//---------------------------------------------------------------------------------------------------
				//트랜잭션 모드 명령어 & 입력/수정/삭제 작업 처리
				//---------------------------------------------------------------------------------------------------
				switch (eCommand)
				{
					//데이터베이스 연결
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT:
						sCommand = string.Format("{0}={1}", sStyle, ComCls.cConst.PC_DB_TRANSACTION_CONNECT);

						break;
					//데이터베이스 트랜잭션 시작
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_BEGINTRAN,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
					//데이터베이스 Sql 처리(입력/수정/삭제)
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL:
						//sJobMode = Convert.ToBoolean(oDataGridView.Rows[nRow].Cells[sColName].Value);
						//if (sJobMode == true)
						//{
							//데이터베이스 Sql 명령 만들기
							sCommand = sWebSql;
						//}
						//else
						//{
						//    bResult = false;
						//}
						break;
					//데이터베이스 트랜잭션 완료
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_COMMIT,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
					//데이터베이스 트랜잭션 취소
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_ROLLBACK,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
					//데이터베이스 연결 끊기
					case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.DISCONNECT:
						sCommand = string.Format("{0}={1}&{2}={3}",
												sStyle, ComCls.cConst.PC_DB_TRANSACTION_DISCONNECT,
												ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

						break;
				}
				//---------------------------------------------------------------------------------------------------
				//전체 경로 만들기
				//---------------------------------------------------------------------------------------------------
				if (bResult == true)
				{
					sUrl = string.Format("{0}?{1}={2}&{3}={4}&{5}={6}&{7}",
										ComCls.cConst.PC_WEBSQL_WEBPARSE_URL,
										ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_TCUD,
										ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
										ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
										sCommand);
				}
				else sUrl = null;
				//---------------------------------------------------------------------------------------------------
			}
			catch (Exception ex)
			{
				sUrl = null;
				bResult = false;

				throw ex;
			}

			return bResult;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>[Create Cads] Cads 추가</summary>
		/// <returns>bool</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		private bool mf_CreateCads()
		{
			bool bResult = true;
			string sDataSet = null;
			DataSet oDataSet = null;
			int nRowCount = 0;
			int nColCount = 0;
			string sErrorMsg = null;
			string sSID = null;
			//---------------------------------------------------------------------------------------------------
			string sUrl = null;
			string sWebSql = null;
			string sUserErrorMsg = null;
			//---------------------------------------------------------------------------------------------------
			int nDocsOidTemp = 0;
			try
			{
				//데이터베이스 연결 명령 만들기
				if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT, null, null, -1, ref sUrl, null) == true)
				{
					//데이터베이스 연결
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
					{
						//세션 ID가 생성된 경우
						if (sSID != null)
						{
							//데이터베이스 트랜잭션 시작 명령 만들기
							if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN, sSID, null, -1, ref sUrl, null) == true)
							{
								//데이터베이스 트랜잭션 시작
								if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
								{
									//---------------------------------------------------------------------------------------------------
									//CAD URL 만들기
									//---------------------------------------------------------------------------------------------------
									sWebSql = string.Format("{0}&{1}={2}", this.mf_MakeWeb_CreateCadtUrl(), ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);
									
									if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL, sSID, this.dgvCadsFile, -1, ref sUrl, sWebSql) == true)
									{
										//데이터베이스 Sql 처리
										if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
										{
											//데이터베이스 처리 성공인 경우
											if (nRowCount > 0)		//여기서는 RowCount 에 DOCSOID 값 전달한다.
											{
												nDocsOidTemp = nRowCount;
												//---------------------------------------------------------------------------------------------------
												//데이터그리드뷰 항목들 Row 별 작업
												//---------------------------------------------------------------------------------------------------
												for (int nRow = 0; nRow < this.dgvCadsFile.Rows.Count; nRow++)
												{
													//---------------------------------------------------------------------------------------------------
													//FILE LIST URL 만들기
													//---------------------------------------------------------------------------------------------------
													sWebSql = string.Format("{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}",
																			ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_FILELIST_CUD",
																			"iJOBMODE", "CREATE_FILELIST",
																			"iDOCSCID", 1230,
																			"iDOCSOID", nDocsOidTemp,
																			"iSVR_FILEPATH", this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_ServerFilePath"].Value.ToString(),
																			"iSVR_FILENAME", this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_ServerFileName"].Value.ToString(),
																			"iLOC_FILEPATH", this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_LocalFilePath"].Value.ToString(),
																			"iLOC_FILENAME", this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_LocalFileName"].Value.ToString(),
																			"iREVISION", this.txtCadRevision.Text,
																			"iCONTENTTYPE", this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_ContentType"].Value.ToString(),
																			ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);
													if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL, sSID, this.dgvCadsFile, nRow, ref sUrl, sWebSql) == true)
													{
														//데이터베이스 Sql 처리
														if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
														{
															//데이터베이스 처리 성공인 경우
															if (nRowCount > 0)
															{
																bResult = true;
															}
															else
															{
																bResult = false;

																sUserErrorMsg = string.Format("{0}번 행에서 오류", nRow + 1);

																//에러 발생 행 선택
																this.mv_oFunc.pf_DataGridViewAllUnSelectCell(this.dgvCadsFile, nRow);

																break;
															}
															//---------------------------------------------------------------------------------------------------
														}
														else
														{
															bResult = false;
															sUserErrorMsg = string.Format("{0}{1}", "[오류]", sErrorMsg);
															break;
														}
													}
												}
											}
											else
											{
												bResult = false;

												if (nRowCount == -2)
													sUserErrorMsg = ComCls.cConst.PC_ERROR_DUPLICATE_CADS_ID;
												sUserErrorMsg = string.Format("{0}{1}", "[오류]", sErrorMsg);
											}
										}
										else
										{
											bResult = false;
											sUserErrorMsg = string.Format("{0}{1}", "[오류]", sErrorMsg);
										}
									}
									//---------------------------------------------------------------------------------------------------
									//데이터베이스 트랜잭션 처리
									//---------------------------------------------------------------------------------------------------
									if (bResult == true)
									{
										//데이터베이스 트랜잭션 완료 명령 만들기
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT, sSID, null, -1, ref sUrl, null) == true)
										{
											//데이터베이스 트랜잭션 완료
											if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
											{
												//결과 메세지 출력
												ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_UPDATE), ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
											}
										}
									}
									else
									{
										//데이터베이스 트랜잭션 취소 명령 만들기
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK, sSID,  null, -1, ref sUrl, null) == true)
										{
											//데이터베이스 트랜잭션 취소
											this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID);

											ComCls.cException.MessageBoxShow(this, sUserErrorMsg, ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
										}
									}
									//---------------------------------------------------------------------------------------------------
								}
							}
						}
					}
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return bResult;
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 함수(Method)/API - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pf_" + 함수명 또는 API 함수명 으로 시작
		//         - 영문 대소문자로 시작하고 함수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 함수(Method) 선언 예</summary>
		/// <param name="sStr">공용(public) 함수(Method) 인자 선언 예</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pf_Hello(string sStr)
		{
			try
			{
				sStr = "Hello...";
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return sStr;
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 시스템 이벤트함수 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 없음!
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>폼 로드 될 때 발생</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void frmCreateCads_Load(object sender, EventArgs e)
		{
			try
			{
				//---------------------------------------------------------------------------------------------------
				//공용함수 인스턴스 생성
				//---------------------------------------------------------------------------------------------------
				this.mv_oFunc = new ComCls.cFunction(this);
				this.txtSpName.Text = this.mv_sSpName;
				this.txtParentCid.Text = this.mv_sParentCID;
				this.txtParentOid.Text = this.mv_sParentOID;
				this.mv_oFunc.pf_DataGridViewInit(this.dgvCadsFile, 0, true, false);
				//---------------------------------------------------------------------------------------------------
				//CAD TYPE 설정(2D DRAWINGS / 3D MODELS) - 생성자에서 받아온 문자열
				//---------------------------------------------------------------------------------------------------
				this.cmbCadType.SelectedItem = this.mv_sCadType;
				this.cmbCadType.Enabled = false;
				//---------------------------------------------------------------------------------------------------
				//첫 등록 캐드 리비전 A로 셋팅
				//---------------------------------------------------------------------------------------------------
				this.txtCadRevision.Text = "A";
				this.txtCadRevision.ReadOnly = true;
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>OK(저장) 버튼 클릭 시</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void btnOk_Click(object sender, EventArgs e)
		{
			bool bResult = false;

			try
			{
				//---------------------------------------------------------------------------------------------------
				//필수 입력 항목 값 Null 체크
				//---------------------------------------------------------------------------------------------------
				// Cad Type 체크
				if (this.cmbCadType.SelectedItem == null)
				{
					ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_TYPE, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
				}
				// Cad Number 체크
				else if (string.IsNullOrEmpty(this.txtCadNumber.Text) == true)
				{
					ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_NUMBER, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
				}
				// Cad Name 체크
				else if (string.IsNullOrEmpty(this.txtCadName.Text) == true)
				{
					ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_NAME, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
				}
				else
				{
					if (ComCls.cException.MessageConfirmBoxShow(this, string.Format("[{0}] {1}{2}", this.txtCadNumber.Text, this.txtCadName.Text,
						ComCls.cConst.PC_MSG_CREATE_CADS), ComCls.cConst.PC_MSG_CREATE_CADS_TITLE) == System.Windows.Forms.DialogResult.Yes)
					{
						//---------------------------------------------------------------------------------------------------
						//저장 작업 실행
						//---------------------------------------------------------------------------------------------------
						if (this.mf_CreateCads() == true)
						{
						    bResult = true;

						    //PROJECTS에서 추가한 경우
						    if (this.mv_frmProjects != null)
						        this.mv_frmProjects.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtParentCid.Text), Convert.ToInt32(this.txtParentOid.Text), null);
						    //PARTS에서 추가한 경우
						    if (this.mv_frmParts != null)
						        this.mv_frmParts.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtParentCid.Text), Convert.ToInt32(this.txtParentOid.Text), null);
						}
					}
					//---------------------------------------------------------------------------------------------------
					//성공 시 창 닫기
					//---------------------------------------------------------------------------------------------------
					if (bResult == true)
					{
						this.Close();
					}
				}
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>Apply(적용) 버튼 클릭 시</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void btnApply_Click(object sender, EventArgs e)
		{
			bool bResult = false;

			try
			{
				//---------------------------------------------------------------------------------------------------
				//필수 입력 항목 값 Null 체크
				//---------------------------------------------------------------------------------------------------
				// Cad Type 체크
				if (this.cmbCadType.SelectedItem == null)
				{
					ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_TYPE, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
				}
				// Cad Number 체크
				else if (string.IsNullOrEmpty(this.txtCadNumber.Text) == true)
				{
					ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_NUMBER, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
				}
				// Cad Name 체크
				else if (string.IsNullOrEmpty(this.txtCadName.Text) == true)
				{
					ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_NAME, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
				}
				else
				{
					if (ComCls.cException.MessageConfirmBoxShow(this, string.Format("[{0}] {1}{2}", this.txtCadNumber.Text, this.txtCadName.Text,
						ComCls.cConst.PC_MSG_CREATE_CADS), ComCls.cConst.PC_MSG_CREATE_CADS_TITLE) == System.Windows.Forms.DialogResult.Yes)
					{
						//---------------------------------------------------------------------------------------------------
						//저장 작업 실행
						//---------------------------------------------------------------------------------------------------
						if (this.mf_CreateCads() == true)
						{
							bResult = true;

							//PROJECTS에서 추가한 경우
							if (this.mv_frmProjects != null)
							    this.mv_frmProjects.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtParentCid.Text), Convert.ToInt32(this.txtParentOid.Text), null);
							//PARTS에서 추가한 경우
							if (this.mv_frmParts != null)
							    this.mv_frmParts.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtParentCid.Text), Convert.ToInt32(this.txtParentOid.Text), null);
						}
					}
					//---------------------------------------------------------------------------------------------------
					//성공 시 Cad Number 초기화
					//---------------------------------------------------------------------------------------------------
					if (bResult == true)
					{
						this.txtCadNumber.Text = null;
						this.dgvCadsFile.Rows.Clear();
					}
				}
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>Cancel(취소) 버튼 클릭 시</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void btnCancel_Click(object sender, EventArgs e)
		{
			try
			{
				if (ComCls.cException.MessageConfirmBoxShow(this, ComCls.cConst.PC_MSG_CREATE_CADS_CANCEL, ComCls.cConst.PC_MSG_CREATE_CADS_TITLE) == System.Windows.Forms.DialogResult.Yes)
				{
					this.Close();
				}
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>Add(파일추가) 버튼 클릭 시</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void btnAddFile_Click(object sender, EventArgs e)
		{
			ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL eProtocol = ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.EMPTY;
			ComCls.cConst.PE_FILE_UPDOWN_TYPE eType = ComCls.cConst.PE_FILE_UPDOWN_TYPE.EMPTY;
			//string sWebHttpServerPath = null;
			string sWebFtpServerPath = null;
			string sWebFtpServerFileNameReName = null;
			string sFilenamePath = null;

			DialogResult dResult = System.Windows.Forms.DialogResult.None;
			
			try
			{
				//---------------------------------------------------------------------------------------------------
				//파일 열기 다이얼로그 초기화
				//---------------------------------------------------------------------------------------------------
				this.openCadFileDialog.Filter = "모든 파일|*.*|엑셀문서|*.xls*|파워포인트|*.ppt|워드문서|*.doc|텍스트문서|*.txt";
				this.openCadFileDialog.FileName = "";
				dResult = this.openCadFileDialog.ShowDialog();

				if (dResult == System.Windows.Forms.DialogResult.OK && this.openCadFileDialog.FileName != "")
				{
					//---------------------------------------------------------------------------------------------------
					//업로드 다운로드 결정
					//---------------------------------------------------------------------------------------------------
					eType = ComCls.cConst.PE_FILE_UPDOWN_TYPE.UPLOAD;
					//---------------------------------------------------------------------------------------------------
					//완료 이벤트 핸들러(필요한 경우만)
					//---------------------------------------------------------------------------------------------------
					this.mv_oFunc.OnUpDownloadFileCompleted -= new ComCls.cFunction.UpDownloadFileCompleted(mv_oFunc_OnUpDownloadFileCompleted);
					this.mv_oFunc.OnUpDownloadFileCompleted += new ComCls.cFunction.UpDownloadFileCompleted(mv_oFunc_OnUpDownloadFileCompleted);
					//---------------------------------------------------------------------------------------------------
					//HTTP 사용
					//---------------------------------------------------------------------------------------------------
					//if (this.radioHttp.Checked == true)
					//{
					//    eProtocol = ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.HTTP;

					//    //sWebHttpServerPath = string.Format("{0}/{1}", "http://localhost/WebParse", "UpLoadFile.aspx");
					//    sWebHttpServerPath = string.Format("{0}/{1}", ComCls.cConst.PC_BOM_HTTP_FILEUPLOAD_URL, "UpLoadFile.aspx");
					//    sFilenamePath = this.openFileDialog1.FileName;

					//    //this.mv_oFunc.pf_FileUpDownLoad(eProtocol, eType, sWebHttpServerPath, sFilenamePath, null, null, false);
					//}
					//---------------------------------------------------------------------------------------------------
					//FTP 사용
					//---------------------------------------------------------------------------------------------------
					eProtocol = ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.FTP;

					//sWebFtpServerPath = string.Format("{0}/{1}", "ftp://localhost/UpDownFiles", this.openFileDialog1.SafeFileName);
					sWebFtpServerPath = string.Format("{0}/{1}/{2}", ComCls.cConst.PC_BOM_FTP_FILEUPLOAD_URL, "Cad", this.openCadFileDialog.SafeFileName);
					sWebFtpServerFileNameReName = string.Format("{0}_{1}", DateTime.Now.Ticks, this.openCadFileDialog.SafeFileName);
					sFilenamePath = this.openCadFileDialog.FileName;

					this.mv_oFunc.pf_FileUpDownLoad(eProtocol, eType, sWebFtpServerPath, sWebFtpServerFileNameReName, sFilenamePath, "educ_ftp", "educ_ftp", false);
					//---------------------------------------------------------------------------------------------------
				}
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>Remove(파일삭제) 버튼 클릭 시</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void btnRemoveFile_Click(object sender, EventArgs e)
		{
			bool bResult = false;
			int nCheckRowCount = 0;
			int nRowCount = -1;

			try
			{
				//---------------------------------------------------------------------------------------------------
				//CheckBox 체크 여부 확인
				//---------------------------------------------------------------------------------------------------
				for (int nRow = 0; nRow < this.dgvCadsFile.Rows.Count; nRow++)
				{
					if (Convert.ToBoolean(this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_ChkBox"].Value) == true)
					{
						nCheckRowCount++;
					}
				}
				//---------------------------------------------------------------------------------------------------
				//삭제 항목 체크가 있을 경우
				//---------------------------------------------------------------------------------------------------
				if (nCheckRowCount > 0)
				{
					if (ComCls.cException.MessageConfirmBoxShow(this, ComCls.cConst.PC_MSG_DELETE_FILE, ComCls.cConst.PC_MSG_DELETE_FILE_TITLE) == System.Windows.Forms.DialogResult.Yes)
					{
						nRowCount = this.dgvCadsFile.Rows.Count;

						if (nRowCount > 0)
						{
							for (int nRow = nRowCount - 1; nRow >= 0; nRow--)
							{
								if (Convert.ToBoolean(this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_ChkBox"].Value) == true)
								{
									bResult = this.mv_oFunc.pf_FtpDeleteFile(string.Format("{0}{1}", this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_ServerFilePath"].Value.ToString(), this.dgvCadsFile.Rows[nRow].Cells["dgvCadsFile_ServerFileName"].Value.ToString()),
																			"educ_ftp", "educ_ftp");

									if (bResult == true)
									{
										this.dgvCadsFile.Rows.Remove(this.dgvCadsFile.Rows[nRow]);
									}
									else
									{
										bResult = false;
										ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_FILE_DELETE_ERROR, ComCls.cConst.PC_ERROR_FILE_DELETE_TITLE);

										break;
									}
								}
							}
							if (bResult == true)
							{
								ComCls.cException.MessageBoxShow(this, ComCls.cConst.PC_MSG_APPBOM_DELETE, ComCls.cConst.PC_MSG_APPBOM_DELETE_TITLE);
							}
						}
					}
				}
				else
				{
					ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_SELECTED, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
				}
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>파일 업/다운로드 이벤트 핸들러</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void mv_oFunc_OnUpDownloadFileCompleted(object sender, ComCls.cConst.pv_strucFileUpDownloadInfo strucFileUpDownloadInfo)
		{
			string[] saDataSetCols = null;
			string sMsg = null;

			try
			{
				if (strucFileUpDownloadInfo.eProtocol == ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.HTTP) sMsg = "HTTP ";
				else if (strucFileUpDownloadInfo.eProtocol == ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.FTP) sMsg = "FTP ";

				if (strucFileUpDownloadInfo.eType == ComCls.cConst.PE_FILE_UPDOWN_TYPE.UPLOAD) sMsg += "파일 업로드 ";
				else if (strucFileUpDownloadInfo.eType == ComCls.cConst.PE_FILE_UPDOWN_TYPE.DOWNLOAD) sMsg += "파일 다운로드 ";

				if (strucFileUpDownloadInfo.eStatus == ComCls.cConst.PE_FILE_UPDOWN_STATUS.COMPLETE) sMsg += "성공!";
				else if (strucFileUpDownloadInfo.eStatus == ComCls.cConst.PE_FILE_UPDOWN_STATUS.CANCEL) sMsg += "실패!";

				if (sMsg != null)
				{
					MessageBox.Show(sMsg, "파일 업/다운로드", MessageBoxButtons.OK, MessageBoxIcon.Information);

					if (strucFileUpDownloadInfo.eType == ComCls.cConst.PE_FILE_UPDOWN_TYPE.UPLOAD && strucFileUpDownloadInfo.eStatus == ComCls.cConst.PE_FILE_UPDOWN_STATUS.COMPLETE)
					{
						saDataSetCols = new string[12];

						saDataSetCols[0] = "C";
						saDataSetCols[1] = "false";
						saDataSetCols[2] = "-10";
						saDataSetCols[3] = "-10";
						saDataSetCols[4] = "-10";
						saDataSetCols[5] = "-10";
						saDataSetCols[6] = strucFileUpDownloadInfo.sWebServerPath;
						saDataSetCols[7] = strucFileUpDownloadInfo.sWebServerFileNameReName;
						saDataSetCols[8] = strucFileUpDownloadInfo.sFileNamePath;
						saDataSetCols[9] = strucFileUpDownloadInfo.sFileName;
						saDataSetCols[10] = "Cad";
						saDataSetCols[11] = "Download";
						
						this.dgvCadsFile.Rows.Add(saDataSetCols);
					}
				}
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>Download 버튼 클릭 시</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private void dgvCadsFile_CellContentClick(object sender, DataGridViewCellEventArgs e)
		{
			ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL eProtocol = ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.EMPTY;
			ComCls.cConst.PE_FILE_UPDOWN_TYPE eType = ComCls.cConst.PE_FILE_UPDOWN_TYPE.EMPTY;
			//string sWebHttpServerPath = null;
			string sWebFtpServerPath = null;
			string sFilenamePath = null;

			DialogResult dResult = System.Windows.Forms.DialogResult.None;

			try
			{
				if (this.dgvCadsFile.SelectedRows != null && e.ColumnIndex == this.dgvCadsFile.SelectedRows[0].Cells["dgvCadsFile_Download"].ColumnIndex)
				{
					//---------------------------------------------------------------------------------------------------
					//파일 저장 다이얼로그 초기화
					//---------------------------------------------------------------------------------------------------
					this.saveCadFileDialog.Filter = "모든 파일|*.*|엑셀문서|*.xls*|파워포인트|*.ppt|워드문서|*.doc|텍스트문서|*.txt";
					this.saveCadFileDialog.FileName = this.dgvCadsFile.SelectedRows[0].Cells["dgvCadsFile_LocalFileName"].Value.ToString();
					dResult = this.saveCadFileDialog.ShowDialog();

					if (dResult == System.Windows.Forms.DialogResult.OK && this.saveCadFileDialog.FileName != "")
					{
						//---------------------------------------------------------------------------------------------------
						//업로드 다운로드 결정
						//---------------------------------------------------------------------------------------------------
						eType = ComCls.cConst.PE_FILE_UPDOWN_TYPE.DOWNLOAD;
						//---------------------------------------------------------------------------------------------------
						//완료 이벤트 핸들러(필요한 경우만)
						//---------------------------------------------------------------------------------------------------
						this.mv_oFunc.OnUpDownloadFileCompleted -= new ComCls.cFunction.UpDownloadFileCompleted(mv_oFunc_OnUpDownloadFileCompleted);
						this.mv_oFunc.OnUpDownloadFileCompleted += new ComCls.cFunction.UpDownloadFileCompleted(mv_oFunc_OnUpDownloadFileCompleted);
						////---------------------------------------------------------------------------------------------------
						////HTTP 사용
						////---------------------------------------------------------------------------------------------------
						//if (this.radioHttp.Checked == true)
						//{
						//    eProtocol = ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.HTTP;

						//    //sWebHttpServerPath = string.Format("{0}/{1}", "http://localhost/WebParse/UpDownFiles", "download600.zip");
						//    sWebHttpServerPath = string.Format("{0}/{1}/{2}", ComCls.cConst.PC_BOM_HTTP_FILEDOWNLOAD_URL, "Cad", "download29.zip");
						//    sFilenamePath = this.saveFileDialog1.FileName;

						//    //this.mv_oFunc.pf_FileUpDownLoad(eProtocol, eType, sWebHttpServerPath, sFilenamePath, null, null, false);
						//}
						//---------------------------------------------------------------------------------------------------
						//FTP 사용
						//---------------------------------------------------------------------------------------------------
						//if (this.radioFtp.Checked == true)
						//{
							eProtocol = ComCls.cConst.PE_FILE_UPDOWN_PROTOCOL.FTP;

							//sWebFtpServerPath = string.Format("{0}/{1}", "ftp://localhost/UpDownFiles", "download600.zip");
							sWebFtpServerPath = string.Format("{0}{1}", this.dgvCadsFile.SelectedRows[0].Cells["dgvCadsFile_ServerFilePath"].Value.ToString(), this.dgvCadsFile.SelectedRows[0].Cells["dgvCadsFile_ServerFileName"].Value.ToString());
							sFilenamePath = this.saveCadFileDialog.FileName;

							this.mv_oFunc.pf_FileUpDownLoad(eProtocol, eType, sWebFtpServerPath, null, sFilenamePath, "educ_ftp", "educ_ftp", false);
						//}
						//---------------------------------------------------------------------------------------------------
					}
				}
			}
			catch (Exception ex)
			{
				ComCls.cException.ExceptionMessageBox(ex, this);
			}
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
	}// End class frmCreateCads
}// End namespace TimsXBX
